import java.util.Scanner;

// 1:无需package
// 2: 类名必须Main, 不可修改
//题目地址：https://www.lanqiao.cn/problems/3511/learning/
public class 飞机降落 {
    //输入数据组数
    private static int T;
    //每组有几架飞机
    private static int N;
    private static boolean flag = false;
    private static Plane[] planes;

    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        //在此输入您的代码...
        T = scan.nextInt();
        //对于每一组数据
        while (T-- > 0) {
            N = scan.nextInt();
            planes = new Plane[N];
            for (int i = 0; i < N; i++) {
                int ti = scan.nextInt();
                int di = scan.nextInt();
                int li = scan.nextInt();
                planes[i] = new Plane(ti, di, li);
            }
            //先测试输入有效还是无效:测试结果为有效
            /*for (int i = 0; i < N; i++) {
                System.out.println("第"+(i+1)+"架飞机的数据："+planes[i].getTi()+" "+planes[i].getDi()+" "+planes[i].getLi());
            }*/
            //有了数据就开始dfs遍历
            dfs(0, 0);
            if (flag) {
                System.out.println("YES");
            } else System.out.println("NO");
            //清空数据，方便下一组数据
            flag = false;
        }
        scan.close();
    }

    /**
     * @param number 当前降落了的飞机数量
     * @param time   当前时间
     */
    private static void dfs(int number, int time) {
        //先写终止条件
        //如果已经降落的飞机数量大于等于已有飞机数量，也就是全都降落完了，就返回去
        if (number >= N) {
            flag = true;
            return;
        }
        //然后就写具体的向下遍历的过程
        //有多少个选择就几层循环
        for (int i = 0; i < N; i++) {
            //如果当前飞机没降落，
            if (!planes[i].islanded) {
                //那就判断一下能否降落：当前时间要小于等于飞机最长等待时间
                if (time <= planes[i].getTi() + planes[i].getDi()) {
                    planes[i].setIslanded(true);
                    //两种降落情况：①跑道空闲，直接降落
                    if (time < planes[i].getTi()) {
                        dfs(number + 1, planes[i].getTi() + planes[i].getLi());
                    }
                    //飞机在等跑道空闲，那空闲之后就直接降落
                    else {
                        dfs(number + 1, time + planes[i].getLi());
                    }
                    //下面的遍历完了，回来之后，将自己标为没降落，尝试下一个方案
                    planes[i].setIslanded(false);
                }
            }
        }
    }

    static class Plane {
        //飞机到达时间
        private int Ti;
        //飞机最大盘旋时间
        private int Di;
        //飞机降落需要的时间
        private int Li;
        //飞机是否降落了
        private boolean islanded;

        public Plane(int ti, int di, int li) {
            Ti = ti;
            Di = di;
            Li = li;
        }

        public int getTi() {
            return Ti;
        }

        public void setIslanded(boolean islanded) {
            this.islanded = islanded;
        }

        public int getDi() {
            return Di;
        }

        public int getLi() {
            return Li;
        }
    }
}